package dev

import (
	"fmt"
	"gorm.io/driver/sqlite"
	"gorm.io/gorm"
	"os"
	"time"
)

// UserConfig 是用户的数据库模型
type UserConfig struct {
	gorm.Model
	Id         int       `json:"id" gorm:"primaryKey;autoIncrement"`
	Username   string    `json:"username" gorm:"unique;not null"`
	Password   string    `json:"password" gorm:"not null"`
	ServerPort int       `json:"serverPort" gorm:"not null"`
	Quota      int64     `json:"quota" gorm:"not null"`      // 用户的流量配额，单位为字节
	Used       int64     `json:"used" gorm:"default:0"`      // 用户已经使用的流量
	PlanType   string    `json:"planType" gorm:"not null"`   // 套餐类型
	ExpiryDate time.Time `json:"expiryDate" gorm:"not null"` // 套餐的过期时间
}

type ShadowsocksConfig struct {
	Server   string       `json:"server"`
	Users    []UserConfig `json:"users"`
	Method   string       `json:"method"`
	Timeout  int          `json:"timeout"`
	FastOpen bool         `json:"fast_open"`
	Mode     string       `json:"mode"`
}

type JWTConfig struct {
	UserId   string `json:"userId"`
	Username string `json:"username"`
}

func InitDB() (*gorm.DB, error) {
	dbFile := "shadowsocks_users.db"

	// 检查数据库文件是否存在
	if _, err := os.Stat(dbFile); os.IsNotExist(err) {
		// 文件不存在，创建一个空文件
		file, err := os.Create(dbFile)
		if err != nil {
			return nil, fmt.Errorf("failed to create database file: %w", err)
		}
		defer func(file *os.File) {
			err := file.Close()
			if err != nil {

			}
		}(file)
	}

	// 连接 SQLite 数据库
	db, err := gorm.Open(sqlite.Open(dbFile), &gorm.Config{})
	if err != nil {
		return nil, fmt.Errorf("failed to connect to database: %w", err)
	}

	// 自动迁移数据库结构
	err = db.AutoMigrate(&UserConfig{})
	if err != nil {
		return nil, fmt.Errorf("failed to migrate database schema: %w", err)
	}

	return db, nil
}
